package com.fyb.basic.juc.completableFuture;

import java.util.concurrent.CompletableFuture;

/**
 * @Author：MR.FANG
 * @name：ThenCombine
 * 演示CompletableFuture的thenCombine（）
 * 作用：将上个任务和这个任务一起执行 等这两个结果都执行完后  得到两个结果   在把这两个结果加工成一个结果
 * 流程：小白点菜 -》 厨师炒菜 + 服务员蒸饭 -》 小白吃饭(吃饭的前提是 厨师炒完菜 和服务员蒸完饭)
 * @Date：2025/7/2 下午2:08
 */
public class ThenCombine {

    public static void main(String[] args){
        // 1、小王进入餐厅的逻辑
        SmallTool.printTimeAndTread("小王进入餐厅");
        SmallTool.printTimeAndTread("小王点了一份西红柿炒蛋，又点了一份米饭");

        CompletableFuture<String> completableFuture = CompletableFuture.supplyAsync(() -> {
            SmallTool.printTimeAndTread("厨师炒菜");
            SmallTool.sleepMillis(200);
            return "厨师炒菜";
        }).thenCombine(CompletableFuture.supplyAsync(() -> {
            SmallTool.printTimeAndTread("服务员焖饭");
            SmallTool.sleepMillis(200);
            return "米饭";
        }), (dict, rice) -> {
            SmallTool.printTimeAndTread("服务员打饭");
            SmallTool.sleepMillis(200);
            return String.format("%s + %s 好了", dict, rice);
        });

        SmallTool.printTimeAndTread("小王正在打游戏");
        SmallTool.printTimeAndTread(String.format("%s,小王开吃", completableFuture.join()));
    }

}
